package com.unittec.zk.provider.auth.mapper;

import java.util.List;
import java.util.Map;

import com.unittec.zk.sdk.auth.domain.SysUserInfo;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.unittec.zk.provider.auth.dto.UserInfo;
import com.unittec.zk.provider.auth.entity.SysRole;
import com.unittec.zk.provider.auth.entity.SysUser;
import com.unittec.zk.sdk.auth.domain.SysUserRes;

/**
 * @author Jason
 * @description 用户Mapper
 * @date 2019/11/07
 */
public interface SysUserMapper extends BaseMapper<SysUser> {

    /**
     * 根据id获取用户信息
     *
     * @param id
     * @return
     */
    UserInfo getUserInfoById(String id);

    /**
     * 根据手机号码获取用户信息
     *
     * @param phone
     * @return
     */
    UserInfo getUserInfoByPhone(String phone);

    /**
     * 根据用户名获取用户信息
     *
     * @param username
     * @return
     */
    UserInfo getUserInfoByUsername(String username);

    /**
     * 查询所有用户列表
     *
     * @return
     */
    List<Map<String, Object>> selectAllUserList(@Param("param") Map<String, Object> param);

    /**
     * 查询用户分页列表
     *
     * @param page
     * @param qw
     * @return
     */
    Page<Map<String, Object>> selectSysUserPage(Page<SysUser> page,
                                                @Param(Constants.WRAPPER) LambdaQueryWrapper<SysUser> qw);

    /**
     * 根据部门Id查询用户信息
     *
     * @param page
     * @param depId
     * @param username
     * @return
     */
    IPage<SysUser> getUserByDepId(Page<SysUser> page, @Param("depId") String depId, @Param("username") String username);

    /**
     * 根据角色Id查询用户信息
     *
     * @param page
     * @param roleId
     * @param username
     * @return
     */
    IPage<SysUser> getUserByRoleId(Page<SysUser> page, @Param("roleId") String roleId,
                                   @Param("username") String username);

    /**
     * 根据解决code 查询 用户信息
     *
     * @return
     */
    List<SysUser> getUserByRoleCode(@Param("roleCode") String roleCode);

    /**
     * @param userId
     * @return
     */
    List<SysRole> getRoleCodeByUserId(@Param("userId") String userId);

    /**
     * 根据部门Id获取用户列表
     *
     * @param id
     * @return
     */
    List<SysUserRes> getSysUserResListByDepartId(String id);

    /**
     * 根据部门Id获取用户列表
     *
     * @param id
     * @return
     */
    List<Map<String, Object>> findUserByDepartId(@Param("id") String id);


    /**
     * 获取所有用户信息列表
     *
     * @return
     */
    List<SysUserInfo> getAllSysUserInfoList();
}
